Search Results: "vasudev"

28 April 2013

Vasudev Kamath: Tribute to Beloved Teacher

Today I'm writing this blog with saddened heart. My mentor and a best friend Dr.Ashokkumar is no more. He died yesterday after fighing with Lymph Node cancer. Ashokkumar or Ashok sir that is how we all students used to address him, was a Professor in Information Science Engineering in NMAM Institue of Technology and recently transferred to Computer Science Engineering Departement. My last meeting him with him was last year December during which he was looking every bit okay other than he had knee pain because of which he couldn't walk freely. But I never imagined that it will be my last meeting with him. Ashok sir was also behind the FLOSS event that took place in NMAM Institute of Technology including MiniDebconf 2011 which saw 2 of the foreign DD's Christian Perrier and Jonas Smedegaard. It was because of his first organized FLOSS event which I volunteered called Linux Habba I entered into the FLOSS world. This means its because of him that I started my FLOSS world journey and reached to my current level. Also it was because of his motivation I started writing this blog which I continue till this day.
I whole heartedly thank Ashok sir for teaching me guiding me and motivating me during my difficult times. You will always be remembered through out my life. May your soul Rest In Peace.
Here are the 2 pics of Ashok sir taken during Minidebconf (Credits: Christian Perrier and Kartik Mistry) Ashokkumar with Jonas and Me Ashokkumar during inaugaration of MiniDebconf with Christian and Kartik on stage Good bye Sir :-(

14 April 2013

Vasudev Kamath: Handling C++ symbols that vary across architectures

Disclaimer I'm no symbol expert and dealing with symbol files for first time from the time I started packaging. What I did here is depending on some suggestions I got in #debian-mentors. If you think what I did was wrong please enlighten me :-). Problem Recently 2 of my library packages pugixml and ctpp2 got accepted into Debian archive and when buildd tried to build them on remaining architectures other than one for which I uploaded (amd64) builds failed. This was expected as symbols file which I generated was for amd64. As usual I got 2 serious bug reports #704718 and #705135. Solution First I was not sure how to handle this. I read article on symbols files handling by rra [1] and tried to use pkgkde-symbolshelper tool only to quickly figure out that I need to use pkgkde_symbolshelper addon for dh sequencer. But this was not possible for me as I was using CDBS for packaging. I did a quick chat on #debian-mentors and some one suggested me to tag symbols which vary across architecture with (c++) tag. First I was not sure but after reading dpkg-gensymbols man page understood that I need to replace the entire mangled symbols lines with de-mangled version tagged with (c++) in the beginning. But this was hectic job searching for each deleted symbols and replacing it. So I thought of writing a script to do the job and after struggling for 3 days (yeah I was bit dumb that I didn't read manual date: "2013-04-14 18:39:20 +0530" pugixml and ctpp2 package using it, which is now waiting for Jonas for uploading it. Here is the script
#!/bin/bash
set +x
if [ $# -lt 3 ]; then
    echo "Usage: $0 failed_buildlogs_directory symbols_file package_version"
    exit 2
fi
    
BUILD_LOG_DIRECTORY=$1
SYMBOLS_FILE=$2
PACKAGE_VERSION=$3
VERSION_TO_REPLACE=" $PACKAGE_VERSION\""
for LOGFILE in $(ls $BUILD_LOG_DIRECTORY/*.build); do
    for i in $(grep '^-\s_Z' $LOGFILE   perl -pe 's/-//g;'); do
        if [ $i = $PACKAGE_VERSION ];then
            continue
        fi
        demangled_version="\""$(echo $i" "$PACKAGE_VERSION   c++filt)"\""
        tagged_version="(c++)"$ demangled_version%$VERSION_TO_REPLACE "\" "$PACKAGE_VERSION
        escaped_tagged_version=$(echo $tagged_version   sed 's/\&/\\\&/')
        sed -i "s#$i $PACKAGE_VERSION#$escaped_tagged_version#" $SYMBOLS_FILE
   done
done
So basically to make this work we need all buildlogs to be downloaded from buildd's again this was easy thanks to rra for developing pkgkde-getbuildlogs :-). Once you have build logs directory run the above script as follows
cppsymbol_replace.sh path_to_buildlogs path_to_symbol_file upstream_version
After replacing symbols I tried to build package on i386 chroot and build passed successfully but lintian told me that there are symbols which have Debian version appended to it and this might lead to date: "2013-04-14 18:42:42 +0530" back to mentors :-). It is this time I really understood concept of mangled names generated by compiler and why it vary across the architecture ;-). This time some one by nick pochu suggested me to pass option -v with package version to dpkg-gensymbols to make it generate symbols with package version and not Debian version. The following probably needs to be done if package uses dh sequencer but I'm not sure as I've not tested it. If wrong please correct me.
override_dh_makeshlibs:
    dh_makeshlibs -- -v$PACKAGEVERION #package version needs to be either extracted using parsechangelog or manually fed
If you are using CDBS this is pretty simple. Just add following to rules
DEB_DH_MAKESHLIBS_ARGS_$(pkgname) += -- -v$(DEB_UPSTREAM_VERSION)
I noticed that when I provide (c++) tagged de-mangled name dpkg-gensymbols simply replaces it with proper mangled name but the deletion doesn't trigger an error in dpkg-gensymbols. This script me allowed to replace 128 symbols which were very tricky and long with de-mangled and tagged version in ctpp2, so I hope it should work across different packages without any problem. Only silly mistake I did was occurrence of & symbol in function making sed go mad which I took one full day to debug :facepalm:. So that's it folks, if you see something wrong in what I did please let me know through the comments. [1] http://www.eyrie.org/~eagle/journal/2012-01/008.html

8 March 2013

Vasudev Kamath: Multi-Arch lintian check for font packages

I've provided a new patch #701061 for lintian to warn about font packages that are not marked as Multi-Arch foreign or allowed. Its already included in the lintian by Neils Thykier and will be part of version 2.5.12. The following tag has been implemented
font-package-not-multi-arch-foreign
A Bit of History for this implementation is as follows: We got a bug report on one of the fonts in pkg-fonts team that its not been installed in i386 architecture on a amd64 multi-arch system #694864. We were first confused but Daniel Kahn Gillmor pointed that we indeed need to mark all font packages as Multi-Arch foreign. He proposed that we should write a lintian check for this which I volunteered to do and then forgot!. Recently I was checking my QA page and landed into Ubuntu's page of my package where I saw they were patching imported font package and marking them as Multi-Arch: foreign and I suddenly remembered my promise! and this patch was the result of same enlightenment :-). Since there is huge number of font packages maintained by pkg-fonts devel we targeted this for Jessie release.
Here by I request all font package maintainers to consider marking their packages as Multi-Arch foreign. I also request people to join us on pkg-fonts-devel and help us doing this for all font packages maintained by the team, we really lack people in the team.

11 February 2013

Vasudev Kamath: CDBS Packaging : copyright file support

One of the thing CDBS provides is support for verifying / generating debian/copyright file. This feature will be help full if new files show up in newer releases. It can also be helpful to generate the first version of copyright file. But don't blindly follow this feature, you need to cross verify the things it generates. To use this feature add the following line to your debian/rules file first
include /usr/share/cdbs/1/rules/utils.mk 
 
Now create a file called debian/copyright_hints using touch command
touch debian/copyright_hints
Now run the following command to allow CDBS to do its magic and generate a new file called debian/copyright_newhints
DEB_MAINTAINER_MODE=1 fakeroot debian/rules build
As you see we set the variable DEB_MAINTAINER_MODE which means this is feature to help the maintainer rather than targeted for automatic builds. So if there is no new things added to the new release you should see something like this in the build log.
Scanning upstream source for new/changed copyright notices...
licensecheck -c '.*' -r --copyright -i '^debian/(changelog copyright( _hints _newhints))' -l '99999' *   /usr/lib/cdbs/licensecheck2dep5 > debian/co$
yright_newhints
19 combinations of copyright and licensing found.
No new copyright notices found - assuming no news is good news...
In case there are new files added you should get output similar to below
Scanning upstream source for new/changed copyright notices...
licensecheck -c '.*' -r --copyright -i '^debian/(changelog copyright( _hints _newhints))' -l '99999' *   /usr/lib/cdbs/licensecheck2dep5 > debian/co$
yright_newhints
0 combinations of copyright and licensing found.
Format: http://www.debian.org/doc/packaging-manuals/ 
Upstream-Name: FIXME
Upstream-Contact: FIXME
Source: FIXME
Disclaimer: Autogenerated by CDBS
...
To fix the situation please do the following:
  1) Fully compare debian/copyright_hints with debian/copyright_newhints
  2) Update debian/copyright as needed
  3) Replace debian/copyright_hints with debian/copyright_newhints
So as the last 3 points says you need to compare your copyright_hints and the newly generated file by CDBS copyright_newhints for difference and update the debian/copyright as required and replace the existing debian/copyright_hints with debian/copyright_newhints. Tips
  1. This feature can be used to generate the copyright file for the first time you need a copyright file with only debian/* copyright in it.
  2. If you are using it to generate copyright file for the first time be sure to cross verify the things mentioned in the file than just blindly copy pasting.
  3. If there are binary files like images are involved in your project be sure to clean up those from your copyright_hints before trying to build the package. Because of too much of binary cruft in any files means dpkg-source will be angry at you :-).
Last but not the least, I know CDBS provides some really cool features which we will explore with next few posts but always keep in mind this quote by Jonas. (Of course don't ask me to prove that Jonas did say it as there is no pgp signature of him with quote to verify ;-) )
CDBS is tool to help packagers and does not involve any magic.

Vasudev Kamath: New Series of Posts on CDBS packaging

Well this is just an introductory post to set of posts I'm going to write down here on my blog. Idea is to improve the documentation of CDBS but I still don't have any idea on how I can patch the existing documentation, but in the mean time I'm learning new tricks from Jonas which I want to document some where so I thought my blog would be a good place as whole blog is in markdown format and its the same format me and Jonas agreed to convert the existing CDBS documentation. So this blog will act as a documentation and these post will be then altered modified and put back into a proper CDBS documentation later. I know many people don't like CDBS and most of it because there is no proper documentation, so I'm trying to improve the situation so sit back and enjoy the upcoming posts :-). OK I was sloppy in giving theory on what others think about the CDBS thanks to Phill Hands and Jonas for enlightening me. So with these series I'm just trying to explain CDBS features with real examples and examples how you can tame nasty packaging beasts with CDBS easily.

27 December 2012

Vasudev Kamath: Note to Self: Telling apt to download specific architecture information only

If you have enabled multi-arch enabled in your system and one of the third party repository you use in /etc/apt/sources.list is not providing the foreign arch you have selected then fear not just do the below for that particular repository line.
deb [arch=arch1] uri distribution component
In my case mozilla.debian.net doesn't provide binary-armel hence I just did this
deb [arch=amd64] http://localhost:9999/mdn experimental iceweasel-aurora
and apt stopped complaining about missing foreign arch. Well this is present in man page of sources.list but I just wrote here so I can find it easily next time :-).

19 November 2012

Vasudev Kamath: Weekly Log - 17/23 - 112012

The last week was quite productive as I was on vacation and at home town but sadly I couldn't complete this post so again merging the work with this week but this week ain't much productive as I was tired from journey back and didn't get enough time to recover. So here it goes. Debian Related Upstream Related I raised a pull request #8 on Gubbi fixing the Makefile to more organized and introducing xz compression in it. Additionally I removed distribution specific stuffs from Makefile and made it generic. That's all for the two weeks. This week there will be foss.in and we will be having some Debian specific mini conference, including some Debian basics to newbies and some bug squashing if any :-). So more to report next week, till then Cya.

11 November 2012

Vasudev Kamath: Weekly Log - 27/3 - 112012

OK I became again lazy to log my works and combined 2 weeks again :-). Most of my work is for Debian for this 2 weeks. This week was bit hectic I couldn't dedicate much time for any programming. This week I'm on vacation and will get more time to work on FLOSS and other coding stuffs. Only that I'm on slow network connection :-). Ok cya next week (hopefully) PS: My last weekly log never showed up in planet.d.o not sure what happened may be because I played with feed generating jekyll scripts. Hope this will show up in planet.d.o [1] http://code.metager.de/source/xref/linux/utils/util-linux/sys-utils/setsid.c
[2] http://vasudev.homelinux.net/display/copyninja/34241
[3] https://kakste.com/display/beardyunixer/974150
[4] anonscm.debian.org/gitweb/?p=collab-maint/friendica.git;a=summary

13 October 2012

Vasudev Kamath: Weekly Log - 06/13-102012

Update for 06/10/2012 Well I had not written the weekly work log for the last week that is because the week was short (oh yeah thanks to all these bandhs our week got fluctuated and to be frank the week was only 4 days long) and second was my lazyness. Here goes the update * After a long discussion with Aravinda on "why productivity is reducing these days." We concluded the social network is eating up most of time. So decision was made and I closed all pinned tabs for Twitter Gmail Identi.ca and Friendica on my browser * After the above resolution I finished almost 4 chapters of Moder Perl within 2 hours!. Indeed Social networks kill the productivity. Update for 13/10/2012 I've really fallen in love with computerised bots, thanks to the wonderful KGB bot :-). So majority of my work on this week is on bots. Jabber Dictionary Redesign After thinking for a while I decided to re-write the dictionary bot which when release got an overwhelming response as see in the comments of above link. Few reason for re-write
  1. Generalise the bot framework so single bot can handle multiple languages
  2. Improve the data collection on bot side
  3. Current code base was not very well organised and trying to add more feature it had become messy.
  4. Provide XEP support to help in data collections
Few changes which are already implemented include
  1. New code is now using pyxmpp2 library instead of GPLed xmppy used by current code.
  2. Implemented XEP-0071 extension to properly format the meaning display by the bot
  3. Current implementation was displaying all words in one set without distinguishing between adjectives,verbs proverbs etc. even though wiktionary displays meaning based on this. New implementation gives out meaning in same format as it is displayed on wiktionary.
Things remaining todo
  1. Separating wiktionary parsing logic from bot code by providing some sort of intermediate interface between bot and wiktionary parsers.
  2. Adding more language wiktionary parsers and teaching the bot to become multilingual :-)
  3. Integrating XEP-0004 (Data Forms) for taking the meaning input from user. Current code requires user to enter data in particular format
suckless-tools fix for Wheezy Jakub Wilk suggested me to prepare a minimal version of suckless-tools for Wheezy which includes a patch to the bug #685611. And few minor changes which involve taking over the package and fixes in copyright file other than above mentioned bug. Hopefully release-team will be okay with these changes. I'm waiting for the upload to file an unblock-request. I did face a problem I was halfway through wit suckless-tools_39-1 when Jakub asked me about this change and current repository was fresh one prepared for 39-1 and didn't have history for 38 version. First I thought of preparing separate repository for 38 version which was not an correct option, but I even couldn't play with current repository. So finally I renamed current version of repository to suckless-tools-39.git on collab-maint and prepared fresh repository suckless-tools.git basing it on 38-1 version. From 39 version suckless-tools will be following 3.0 (quilt) source format and will not be working with git-buildpackage as the tool can't handle multi-tarball packages. Yes every tool involved in the package will have separate tarball from 39. More work on Bots Well today I again worked on Jabber bot, but not the dictionary bot. This time its an SMS Gateway bot for Jonas Smedegard and the coding was done in Perl. Thanks to jonas I finally could apply what I learnt in Perl. Code may not be very elegant but it works :-). And after hacking one full day in Perl now I'm not feeling very much interested to go back and hack on my own Python based dictionary bot :-). But I will anyway. Misc So that's it folks. Quite longish post hope you are not bored reading it :-). Well time for movie C'ya all with next weeks log.

1 October 2012

Vasudev Kamath: Weekly Log - 01102012

Well this weeks log comes bit late as my week got extended till today ;-). I had working day at office on Saturday and Sunday due to 2nd Quarter end and instead today is declared as compensatory holiday and tomorrow any how is Gandhi Jayanti. So here it goes. Debian Related Most of my work this week was done for Debian-IN team Well most of this weeks work involved KGB ;-) Personal Works Misc Played Cricket after very long time (Guess after 10 long years). Well it was not official match or anything it was just another Gully Cricket. After the match it came to mind that I need regular physical workout :-P. Well that's it Cya till next week :-)

22 September 2012

Vasudev Kamath: Weekly Log - 22092012

After thinking a while I thought I should record my weekly FLOSS work and I'm starting by this week. This week I'm on vacation and in home town so I could give bit more time for my FLOSS activity. So here it goes this weeks work Bug Squashing
Both these packages are uploaded to unstable first RC bug was related to Debian Installer hence was unblocked before we could file unblock-request. Kartik filed an unblock-request and adsb unblocked it happily and both the packages landed in unstable. New Packages
Both these packages will be backported once Wheezy freezes. One pending wnpp is left on Debian-IN which I've left for Kartik to finish ;-). Font Package Helper I bumped version on dh-make-font[1] to 0.3 now it accepts upstream URL with -u, --upstream switch this will be placed in Homepage: field of control file and in Source: field of copyright file. Probably I need to think of introducing xz compression to original source tarball where upstream is not giving any tarball and probably rewrite it using Perl so it can get included dh-make package. Already a bug filed to get it included in dh-make package 658154. [1] http://anonscm.debian.org/gitweb/?p=debian-in/dh-make-font.git;a=summary Misc and Learnings
Well that is it for this week. Hopefully I will have new stuffs to put up here for the next week, till then Cya.

6 August 2012

Vasudev Kamath: Logging issue with Flask

While enabling logging for release of rewritten version of SILPA described in my previous post I faced a weird problem. I enabled Logging as described in the Flask documentation but SILPA won't log anything to the log even though log file is created in whatever location I gave while configuring the logging. Flask documentation suggests following way to use logging
import logging
from logging.handlers import RequiredHandler
file_handler = RequiredHandler(...)
file_handler.setLevel(logging.WARNING)
app.logger.addHandler(file_handler)
After banging my head for some time I again wanted to look at Python's logging tutorials see if I'm doing something wrong and I found this example
import logging
# create logger
logger = logging.getLogger('simple_example')
logger.setLevel(logging.DEBUG)
# create console handler and set level to debug
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
# create formatter
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
# add formatter to ch
ch.setFormatter(formatter)
# add ch to logger
logger.addHandler(ch)
# 'application' code
logger.debug('debug message')
logger.info('info message')
logger.warn('warn message')
logger.error('error message')
logger.critical('critical message')
So there it is I need to set the logging level even on logger to same level as what I set on my handler. Now I didn't take time to read the documentation because I wanted to see if my findings really does the trick so I modified function configuring logging to look something like below (I'm taking the example given in Flask documentation itself real code can be seen in SILPA code on Github)
import logging
from logging.handlers import RequiredHandler
file_handler = RequiredHandler(...)
file_handler.setLevel(logging.WARNING)
app.logger.setLevel(logging.WARNING)
app.logger.addHandler(file_handler)
This actually did the trick and now Flask is happily logging whatever I give to app.logger.levelname So I don't know this was my stupidity or fault in Flask's documentation by forgetting to mention this crucial point. But in the end all is well :-) Do comment your thoughts.

5 August 2012

Vasudev Kamath: Rewriting SILPA with Flask microframework

As a introduction on what is SILPA you can read my previous post This application was written by Santhosh about 6-7 years ago in May 2010 2009 ( Correct me if I'm wrong Santhosh ;-) Thanks to Santhosh for correcting me ) in Python without using any web framework. He crafted whole system single handed and with very nice ideas. He wrote all the modules available in it for all possible Indian languages even though he is native Malayalam speaker. I joined him 3 years back and I was providing some or other improvements and he ultimately made me as the Co-Developer of SILPA. Recently I came across the Flask microframework and thought of rewriting SILPA to use Flask. You might ask me why Flask? So here are my reasonings
 1. Why reinvent Python webframework when we can use existing? Besides maintaining a not so well known framework code which is not written by you will be difficult    and time consuming.
 2. All Python modules are useful even outside SILPA project why make them dependent on SILPA code?
 3. Templating system used is very old and can't be ported to new Python version lets use something which is new and portable
 4. If new contributor wanted to add a module he need to understand SILPA framework to write and integrate it. This might be discouraging new
    contributions so lets use pure python module and make integration with SILPA straight forward.
 5. I was overwhelmed by Flask :P
I had previously tried bottle microframework but for some reason I couldn't crack it so choosing of Flask is not because it was better among other available microframework or something like that. I choose it because I could easily understand it and it suited my needs better. So I proposed about this to Santhosh and he asked me for a POC code. I started working on April 8 2012 and today by August 5 I can say I've first stable version of SILPA rewritten using Flask deployable over WSGI on Apache2. It can also be deployed on other servers supporting WSGI interface. It took me quite a bit of time but to be frank in the middle I completely had stopped coding because of some other works. Here is the commit graph and code frequency graphs from Github.

Changes in New Version Here is some major changes in current version.
1. Newly developed framework provides plug and play features for new modules.
2. You need to install the modules which you want to run on it separately using PIP and only minimal code change is required. Only configuration and webbridge.py 
   will be changed. Ofcourse you need to add html file to *templates* folder.
3. This version uses decent routing logic from Flask for page serving.
4. It also provides JSONRPC interface which is compatible with previous version but only with method name changed.
5. This version separates out run time module loading and routing the request to modules.
6. Dynamic module loading now happens only at the beginning of application, so if I want to implement caching for particular services it will be straight forward
   now.
7. Routing requests to proper module is adapted from old version with few modifications
8. All previous pages are now converted to use *Jinja2* template system.
Things Remaining TODO Below is some stuffs still pending before this version can completely replace http://silpa.org.in
1. Separate all modules from original SILPA and get it uploaded to pypi
2. Provide RESTful interface
3. Provide proper LICENSE, AUTHORS file for all modules 
4. Prepare a Nice UI
5. Find a better name than *SILPA*
...
Update
Forgot to provide the github link and demo link for the new version of SILPA. Thanks to Aravinda for pointing
it out. Here it goes
Github: http://github.com/copyninja/Silpa-Flask
Demo: http://flasksilpa-indic.rhcloud.com

22 July 2012

Vasudev Kamath: Compiling Harfbuzz on Debian

Harfbuzz (more correctly harfbuzz-ng) is a Text Layout/shaping engine. Mostly supporting rendering of Text including complex scripts. A quote taken from Wikipedia which describes harfbuzz
HarfBuzz (in Persian: ) is a layout/shaping engine for OpenType fonts. Its purpose is to standardize text layout in FOSS; its code originally started as part of the FreeType project, was then developed separately in Qt and Pango, and finally merged back into a common repository. Both Qt and Pango currently use HarfBuzz; other standalone users include Firefox and Chromium, the open source project behind Google Chrome.
Coming directly to the point. You can get Harfbuzz from its Git repository hosted on Freedesktop. It requires following library and binary compilation
    1. ragel: Finite state machine code compiler
    2. libglib2.0-dev: Glib Development files
    3. libcairo2-dev : Cairo 2D graphics library development files
    4. libicu-dev: Development components for International components for Unicode
    5. libgraphite2-dev: Development files for libgraphite2
    6. libfreetype6-dev: Freetype 2 library development files
Once you install all the above package. Follow following commands to build the harfbuzz.
./autogen.sh
./configure --prefix=/usr
make
sudo make install
You can skip make install if you don't like it to be installed on system.I actually wanted to work on the Debian package of Harfbuzz but since there is some one already working on it. Probably I will wait till the guy completes package. I will write on testing the text rendering of your language using harfbuzz in my next post. Till then Cya.

15 July 2012

Vasudev Kamath: Note to Self: Deleting Remote Branches and Tags in Git

Its been a while I'm using Git as a version control system for my various work whether it is FOSS related or my professional work. Every time I stumble into a case where I need to delete an accidentally pushed branch or tag on remote and every time I forget how I did it last time. Today I did it again and I had to search it again to find a method. So here it goes this is a note to myself so I won't forget it next time Deleting a remote branch
git push origin :branchname
Deleting a remote tag
git push origin :refs/tags/tagname
Where origin can be replaced by proper remote if you are using multiple remote for mirroring purpose. If you want to delete locally use following code
git branch -d branchname
git tag -d tagname
Note: To delete tag remotes you need to delete it locally first and then push it. That's it hope it helps others too :-)

21 April 2012

Vasudev Kamath: Update: Issue in Kannada Dictionary Bot

Just a short update for those who are wondering what is Kannada Dictionary bot, it is a small Jabber chat bot written in Python which pulls out meaning for given English or Kannada word from Kannada Wiktionary. More about the usage of this bot can be found in my previous post Recently I've been getting many queries from users that they are not able to access the bot from their GTalk account. Of course no one contacted me directly they were pinging my friend Omshivaprakash and in turn he was pinging and telling that some one contacted him and told bot is not online. But I have monit service monitoring bot 24x7 additionally I could see it online all the time, even when shiv is telling me its offline!. Finally figured out the reason when I went to Jabber So here is the reason
As you ve probably noticed, the jabber.org service has been experiencing connectivity problems with gmail.com and other Google Talk domains (e.g., you might not be able to see if your contacts there are online). The folks at Google are working on a solution and we will post again once they have fixed the problem.
Now folks please have patience till a solution comes up and once its in place you should be able to use the bot without any issue.

15 April 2012

Vasudev Kamath: Update: Falcon Debian package Status

Recently I wrote about packaging Falcon programming language for Debian. So here is the status of package. Package builds multiple binaries and we have successfully separated modules from core Falcon language component
  1. falconpl (Falcon language itself )
  2. falconpl-dbg (Debug symbols)
  3. libfalconpl-engine1 (Falcon engine library)
  4. libfalconpl-engine1-dbg (Debug symbols for Falcon enging)
Core modules like feathers and modules writtein Falcon itself are part of libfalconpl-engine1. Rest of modules are separated into following packages
  1. falconpl-mongodb: Mongodb connector module
  2. falconpl-dbi : Database Abstraction layer
  3. falconpl-dbi-sqlite3: SQLite3 connector based on DBI module
  4. falconpl-dbi-postgresql: PostgreSQL connector based on DBI module
  5. falconpl-dbi-mysql: MySQL connector based on DBI module
  6. falconpl-dbi-firebird: Firebird DB server connector
  7. falconpl-curl: Curl bindings for Falcon
  8. falconpl-dbus: DBus bindings for Falcon
  9. falconpl-dmtx: Data Matrix reader/writer for Falcon
  10. falconpl-hpdf: Haru based PDF module for Falcon
  11. falconpl-gd2: Graphic manipulation module for Falcon
There are 4 modules which I'm not sure how to build (dependency) or if at all possible to build for Linux they are dynlib, wopi, sdl, conio. I need to consult upstream on these modules status and ability to build. Modules not built We didn't build dbi-oracle and dbi-odbc modules as these are proprietary software dependant. Additionally in a conversation with upstream on IRC it was told dynlib module can't be built for 64bit and X86 version of Linux because lack of assembler, but I've not fully confirmed this. Legal Issues To enable the curl bindings I added curl dependency which in turn has dependency on libssl1.0 library which is part of openssl source package which is causing lintian thrown GPL violation error. Kartik will be looking into this. Patches submitted I've submitted total of 6 patches of which 5 patches are already applied to upstream git repo and 6th one is waiting to be applied. In other words upstream is really helpful to us. Well thats all for this week more updates next week (or may be even before that ;-) )

6 April 2012

Vasudev Kamath: Packaging Falcon Programming Language for Debian

Falcon is a programming language which is not yet packaged for Debian. I saw that the ITP#460591 is owned by my Debian mentor and good friend Kartik Mistry. So I jumped in to help him finish this package. Ok enough of introduction now directly to point. We thought its better to base the Debian package on upstream Git repository itself so we can do snapshot release like Go Language package is doing. So in this post I'm going to give steps we used to do this and also guidelines on future packaging of Falcon.
    1. First step we need to clone the upstream Falcon's git repo. Then duplicate *master* branch into *upstream* branch.
      git clone http://git.falconpl.org/falcon.git
      git checkout -b upstream
      
    
    2. Now by staying on *upstream* branch we made it track the upstream's git repo using following commands
       git remote add upstream-falcon http://git.falconpl.org/falcon.git
       git branch --set-upstream upstream-falcon
       
    
    3. We made the master branch point to origin which is our collab-maint git repository.
       git checkout master
       git remote set-url origin git.debian.org:/git/collab-maint/falconpl.git
       
    
    4. Next is creating the pristine-tar branch so that it will be easy for us to build using *git-buildpackage* tools. We just took snapshot of upstream's head and created a tarball and then used *pristine-tar* utility to commit it. Then we tagged upstream version
       git checkout upstream
       git archive --format=tar HEAD   gzip -9 > ../falconpl_0.9.6.8-git20120403.orig.tar.gz
       git tag upstream/0.9.6.8-git20120403
       pristine-tar commit ../falconpl_0.9.6.8-git20120403.orig.tar.gz
       
    
    5. And finally we copied **debian** directory from Ubuntu's falconpl package into our master branch and modified the debian changelog to match our new snapshot version. To release a new version all we need to do is follow step 4 and then additionally merge the upstream with master
So our repo is now in proper shape to be built using git-buildpackage. But we are left with many things to clean and fix. So things which are currently pending are
  1. Make copyright file in Debian copyright format 1.0
  2. Separate out each module falcon builds into separate package. Looks like Ubuntu doesn't install any of modules
  3. Last but not the least upload it to Debian ( Kartik's task :-) )
Even though I'm packaging Falcon for Debian I'm not a Falcon programmer so if there are any Falcon programmer reading this post and want to help you are always welcome :-).

23 March 2012

Vasudev Kamath: Fixing hyde.el

Recently after changing my blog to use jekyll and Github I came across the hyde.el an emacs plugin which allows to maintain a jekyll powered blog from emacs. You can find the post by author here and source code here on Github. At first site I was very happy about plugin and started using it but I could successfully use it only once properly then whenever I launch the plugin I get error message
*zsh:cd blog path no such directory*
(Note: I'm a zsh user not sure if this error is particular to zsh only. If you face same error on other shell please let me know) After error hyde mode never showed jekyll blog properly. Looking at the source code I saw all the statements which were commands were executed using shell-command elisp function similar to following
let (
(cmd (format "cd '%s' && git diff-files --quiet '%s' > /dev/null" repo file))
(= (shell-command cmd) 1))
The cd command in the string was failing some how spoiling all other stuff!.. Probably the ~ in the path to blog was not properly expanded by shell-command, So I thought why not use elisp in built cd function instead and bingo the hyde mode works perfectly fine now!.. I've raised a pull request as I don't like to maintain a fork. Hope author will consider merging my changes. Hope this fix helps others too. Cya.

13 March 2012

Vasudev Kamath: Tag Generation problem in Jekyll

After converting my blog to use Jekyll and hosting it on Github one problem I faced is missing tagging feature for post. I quickly came across this I used plugin from the site and copied and modified some files from authors websites git repository. Only way to use tags on Github was to generate tags locally and move it to Github. To put more light on the point Github disables jekyll plugin so it won't generate the tags after you push your changes to Github repository. You need to follow these steps.
  1. Create posts
  2. Generate site locally by running jekyll
  3. Copy out _site/tag to your website root folder
I did this and it worked. But funny part was when I created new post and tagged it and followed above step for some reason tags won't reflect on respective tag's page and I had no clue why. After banging head for a while I noticed that Previously coped tag folder in site's root is overwriting the tags generated by Jekyll plugin!. Gosh so much for my stupidity :). Now I've written a script to generate tags after writing each new post. It deletes the existing tag directory first and then regenerates tag and copies it out to website root and then it commits the tag directory. Here it is
#!/bin/sh
TAG=tag/
SITE=_site/
if [ -d $ TAG  ]; then
    echo "Deleting $ TAG  directory..."
    rm -rf $ TAG 
fi
echo "Regenerating Site..."
jekyll
echo "Copying $ TAG  ..."
cp -a $ SITE /$ TAG  .
echo "Commiting Changes..."
git commit $ TAG  -m "Latest TAG build"
Hope that helps. Cya!

Next.

Previous.